//先计算每个字符的出现次数, 算一个平均值, 多出来的要记上;
//
//多出来的是count
//
//然后右指针开始移动, 一直到 count = 0; 然后开始尝试收缩,
//
//    如果收缩满足, 就记录, 不满足, 那么, 右侧继续推进.... 一直到结束;
//
//收缩的前提也是在表中存在, 如何断定存在呢? 可以使用Map; 可以使用Map的一些现有方法

// 引入输入, 输出模块
const readline = require("readline");
const rl = readline.createInterface({
    input: process.stdin,
    output: process.stdout
});
let str
rl.on("line", (line) => {
    if (str === undefined) {
        str = line.trim();
        console.log(getResult(str))

        // clear
        str = undefined;
    }

})

/**
 *
 * @param str {string} 传进来的字符串
 * @return {number} 连续修改最小长度
 */
function getResult(str) {
    let obj = {
        "W": 0,
        "A": 0,
        "S": 0,
        "D": 0
    }

    // 初始化记录表
    for (const char of str) {
        obj[char]++
    }
    const avg = str.length / 4
    let total = 0;

    for (const char of "WASD") {
        if (obj[char] > avg) {
            total += obj[char] - avg
            obj[char] -= avg
        } else {
            delete obj[char]
        }
    }

    // 开始双指针查找
    let left = 0;
    let right = 0;
    let result = str.length + 1;
    if (obj.hasOwnProperty(str[0])) {
        obj[str[0]] --
        total--
    }


    // 扩张
    while (left <= right && left < str.length && right < str.length) {
        // 验证
        if (total === 0) {
            // 收缩
            while (left <= right && left < str.length && right < str.length && total === 0) {
                result = Math.min(result, right - left + 1)
                left++;
                if (obj.hasOwnProperty(str[left - 1])) {
                    obj[str[left - 1]] ++
                    total++
                }
            }
        } else {
            // 移动
            right++;
            if (obj.hasOwnProperty(str[right])) {
                obj[str[right]]--
                total--
            }
        }
    }
    return result
}